defmodule IocpMonitor.Dumper.Supervisor do
  @moduledoc """
  数据存储监护进程的定义模块。
  该监护进程监护下列进程：

    * 一个工作进程和数据的队列（`IocpMonitor.Dumper.Queue`）
    * 一个工作进程的监护进程（`IocpMonitor.Dumper.WorkerSupervisor`）

  在任和一个被监护的进程死亡时，当前监护进程会重启所有被监护进程
  """

  use Supervisor

  alias IocpMonitor.Dumper.{WorkerSupervisor}

  def start_link(workers_count) do
    Supervisor.start_link(__MODULE__, workers_count, name: __MODULE__)
  end

  @impl true
  def init(workers_count) do
    children = [
      %{
        id: BlockingQueue,
        start: {BlockingQueue, :start_link, [[name: BlockingQueue]]}
      },
      {WorkerSupervisor, workers_count}
    ]

    Supervisor.init(children, strategy: :one_for_all)
  end
end
